<?php

namespace app\admin\model;

use think\Model;
use fast\Tree;

class Item extends Model
{
    // 表名
    protected $name = 'item';
    
    // 自动写入时间戳字段
    protected $autoWriteTimestamp = false;

    // 定义时间戳字段名
    protected $createTime = false;
    protected $updateTime = false;
    protected $deleteTime = false;

    // 追加属性
    protected $append = [
        'grade_text',
        'status_text'
    ];

    // 项目级别获取器
    public function getGradeTextAttr($value, $data)
    {
        $grade = $this->getGradeList();
        return isset($grade[$data['grade']]) ? $grade[$data['grade']] : $data['grade'];
    }

    // 状态获取器（基于grade字段）
    public function getStatusTextAttr($value, $data)
    {
        $status = [
            'parent' => __('Parent Project'),
            'son' => __('Son Project')
        ];
        return isset($status[$data['grade']]) ? $status[$data['grade']] : $data['grade'];
    }

    // 获取项目级别列表（简化为两级）
    public function getGradeList()
    {
        return [
            'parent' => __('Parent Project'),
            'son' => __('Son Project')
        ];
    }

    // 获取项目状态列表
    public function getStatusList()
    {
        return [
            'parent' => __('Parent Project'),
            'son' => __('Son Project')
        ];
    }

    // 获取项目类型列表（基于gradeid）
    public function getTypeList()
    {
        return [
            '0' => __('Root Project'),
            '1' => __('Sub Project')
        ];
    }

    // 验证规则
    protected $rule = [
        'itemname' => 'max:100', // 项目名称可以为空，但长度不超过100
        'itemintro' => 'max:500', // 项目描述可以为空，但长度不超过500
        'itemprice' => 'integer|egt:0', // 项目价格必须为非负整数
        'itemtime' => 'max:20', // 项目时间可以为空，但长度不超过20
        'clinicid' => 'require|integer|gt:0', // 诊所ID必填且为正整数
        'grade' => 'require|in:parent,son', // 项目级别必填且为parent或son
        'gradeid' => 'integer|egt:0' // 父级ID必须为非负整数
    ];

    // 验证消息
    protected $message = [
        'itemname.max' => '项目名称长度不能超过100个字符',
        'itemintro.max' => '项目描述长度不能超过500个字符',
        'itemprice.integer' => '项目价格必须为整数',
        'itemprice.egt' => '项目价格不能为负数',
        'itemtime.max' => '项目时间长度不能超过20个字符',
        'clinicid.require' => '请选择所属诊所',
        'clinicid.integer' => '诊所ID必须为整数',
        'clinicid.gt' => '请选择有效的诊所',
        'grade.require' => '请选择项目级别',
        'grade.in' => '项目级别只能是父级或子级',
        'gradeid.integer' => '父级ID必须为整数',
        'gradeid.egt' => '父级ID不能为负数'
    ];
}
